function preLoad(){
	if(!this.support.loading){
		alert("You need the Flash Player 9.028 or above to use SWFUpload.");
		return false;
	}
}
function loadFailed(){
	alert("Something went wrong while loading SWFUpload. If this were a real application we'd clean up and then give you an alternative");
}

function fileQueueError(file, errorCode, message){
	try{
		var imageName = "error.gif";
		var errorName = "";

		if(errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED){
			errorName = "您最多只能上传 " + message + " 个文件";
		}
		if(errorName !== ""){
			alert(errorName);
			return;
		}

		switch(errorCode){
			case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
				imageName = "zerobyte.gif";
			break;
			case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
				imageName = "toobig.gif";
			break;
			case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
			case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
			default:
				alert(message);
			break;
		}
		addImage(basePath + "/images/" + imageName);
	} catch(ex){
		this.debug(ex);
	}
}

function fileDialogComplete(numFilesSelected, numFilesQueued){
	try{
		if(numFilesQueued > 0){
			this.startResizedUpload(this.getFile(0).ID, this.customSettings.thumbnail_width, this.customSettings.thumbnail_height, SWFUpload.RESIZE_ENCODING.JPEG, 100);
		}
	} catch(ex){
		this.debug(ex);
	}
}

function uploadProgress(file, bytesLoaded){
	try{
		var percent = Math.ceil((bytesLoaded / file.size) * 100);

		var progress = new FileProgress(file, this.customSettings.upload_target);
		progress.setProgress(percent);
		progress.setStatus("正在上传...");
		progress.toggleCancel(true, this);
	} catch(ex){
		this.debug(ex);
	}
}

// 上传成功
function uploadSuccess(file, serverData){
	try{
		var progress = new FileProgress(file, this.customSettings.upload_target);
		if(serverData.substring(0, 7) === "imgsrc:"){
			addImage(serverData.substring(7), true);
			progress.setStatus("上传完成。");
			progress.toggleCancel(false);
		} else{
			addImage(basePath + "/images/error.gif");
			progress.setStatus("Error.");
			progress.toggleCancel(false);
			alert(serverData);
		}
	} catch(ex){
		this.debug(ex);
	}
}

function uploadComplete(file){
	try{
		if(this.getStats().files_queued > 0){
			this.startResizedUpload(this.getFile(0).ID, this.customSettings.thumbnail_width, this.customSettings.thumbnail_height, SWFUpload.RESIZE_ENCODING.JPEG, 100);
		} else{
			var progress = new FileProgress(file, this.customSettings.upload_target);
			progress.setComplete();
			progress.setStatus("操作完成。");
			progress.toggleCancel(false);
		}
	} catch(ex){
		this.debug(ex);
	}
}

// 上传失败
function uploadError(file, errorCode, message){
	var imageName = "error.gif";
	var progress;
	try{
		switch(errorCode){
			case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
				try{
					progress = new FileProgress(file, this.customSettings.upload_target);
					progress.setCancelled();
					progress.setStatus("Cancelled");
					progress.toggleCancel(false);
				} catch(ex1){
					this.debug(ex1);
				}
			break;
			case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
				try{
					progress = new FileProgress(file, this.customSettings.upload_target);
					progress.setCancelled();
					progress.setStatus("Stopped");
					progress.toggleCancel(true);
				} catch(ex2){
					this.debug(ex2);
				}
			case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
				imageName = "uploadlimit.gif";
			break;
			default:
				alert(message);
			break;
		}
		addImage(basePath + "/images/" + imageName);
	} catch(ex3){
		this.debug(ex3);
	}
}

// 添加图片
function addImage(src, isUpload){
	var newImg = $("<img>").css({
		"max-width" : "200px",
		"max-height" : "150px"
	});

	var imgDiv = $("<div>").css({
		"margin":"2px",
		"width" : "200px",
		"height" : "150px",
		"border" : "1px solid #CCCCCC",
		"text-align" : "center",
		"float":"left"
	}).append(newImg).appendTo($("#thumbnails"));

	newImg = newImg.get(0);// 获取原生dom对象

	if(newImg.filters){
		try{
			newImg.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 0;
		} catch(e){
			newImg.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + 0 + ')';
		}
	} else{
		newImg.style.opacity = 0;
	}

	newImg.onload = function(){
		fadeIn(newImg, 0);
	};
	newImg.src = src;
	// 在隐藏表单里，拼接所有图片地址
	if(isUpload){
		var dom = document.getElementById("swfpreviewImgs");
		dom.value = dom.value + src + ",";
	}
}

function fadeIn(element, opacity){
	var reduceOpacityBy = 5;
	var rate = 30; // 15 fps

	if(opacity < 100){
		opacity += reduceOpacityBy;
		if(opacity > 100){
			opacity = 100;
		}

		if(element.filters){
			try{
				element.filters.item("DXImageTransform.Microsoft.Alpha").opacity = opacity;
			} catch(e){
				element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')';
			}
		} else{
			element.style.opacity = opacity / 100;
		}
	}

	if(opacity < 100){
		setTimeout(function(){
			fadeIn(element, opacity);
		}, rate);
	}
}

function FileProgress(file, targetID){
	this.fileProgressID = "divFileProgress";

	this.fileProgressWrapper = document.getElementById(this.fileProgressID);
	if(!this.fileProgressWrapper){
		this.fileProgressWrapper = document.createElement("div");
		this.fileProgressWrapper.className = "progressWrapper";
		this.fileProgressWrapper.id = this.fileProgressID;

		this.fileProgressElement = document.createElement("div");
		this.fileProgressElement.className = "progressContainer";

		var progressCancel = document.createElement("a");
		progressCancel.className = "progressCancel";
		progressCancel.href = "#";
		progressCancel.style.visibility = "hidden";
		progressCancel.appendChild(document.createTextNode(" "));

		var progressText = document.createElement("div");
		progressText.className = "progressName";
		progressText.appendChild(document.createTextNode(file.name));

		var progressBar = document.createElement("div");
		progressBar.className = "progressBarInProgress";

		var progressStatus = document.createElement("div");
		progressStatus.className = "progressBarStatus";
		progressStatus.innerHTML = "&nbsp;";

		this.fileProgressElement.appendChild(progressCancel);
		this.fileProgressElement.appendChild(progressText);
		this.fileProgressElement.appendChild(progressStatus);
		this.fileProgressElement.appendChild(progressBar);

		this.fileProgressWrapper.appendChild(this.fileProgressElement);

		document.getElementById(targetID).appendChild(this.fileProgressWrapper);
		fadeIn(this.fileProgressWrapper, 0);

	} else{
		this.fileProgressElement = this.fileProgressWrapper.firstChild;
		this.fileProgressElement.childNodes[1].firstChild.nodeValue = file.name;
	}

	this.height = this.fileProgressWrapper.offsetHeight;

}
FileProgress.prototype.setProgress = function(percentage){
	this.fileProgressElement.className = "progressContainer green";
	this.fileProgressElement.childNodes[3].className = "progressBarInProgress";
	this.fileProgressElement.childNodes[3].style.width = percentage + "%";
};
FileProgress.prototype.setComplete = function(){
	this.fileProgressElement.className = "progressContainer blue";
	this.fileProgressElement.childNodes[3].className = "progressBarComplete";
	this.fileProgressElement.childNodes[3].style.width = "";

};
FileProgress.prototype.setError = function(){
	this.fileProgressElement.className = "progressContainer red";
	this.fileProgressElement.childNodes[3].className = "progressBarError";
	this.fileProgressElement.childNodes[3].style.width = "";

};
FileProgress.prototype.setCancelled = function(){
	this.fileProgressElement.className = "progressContainer";
	this.fileProgressElement.childNodes[3].className = "progressBarError";
	this.fileProgressElement.childNodes[3].style.width = "";

};
FileProgress.prototype.setStatus = function(status){
	this.fileProgressElement.childNodes[2].innerHTML = status;
};

FileProgress.prototype.toggleCancel = function(show, swfuploadInstance){
	this.fileProgressElement.childNodes[0].style.visibility = show ? "visible" : "hidden";
	if(swfuploadInstance){
		var fileID = this.fileProgressID;
		this.fileProgressElement.childNodes[0].onclick = function(){
			swfuploadInstance.cancelUpload(fileID);
			return false;
		};
	}
};
